Vue.createApp({
    data() {
        return {
            list: [],
            level: [
                { name: '低级', row: 9, col: 9, count: 10 },
                { name: '中级', row: 20, col: 20, count: 50 },
                { name: '高级', row: 32, col: 32, count: 99 }
            ],
            current: 0, // 确保使用低级关卡
            start:"on",
            count:0,
            m:0,
            s:0,
            timer:null,  //定时器
            num:0
        };
    },
    mounted(){
        this.init()
    },
    watch:{
        num(){
            if(this.num == 1){
                this.startTime()
            }
        }
    },
    methods:{
        startTime(){
            this.timer=setInterval(()=>{
                this.s++
                if(this.s>=60){
                    this.m++
                    this.s=0
                }
            },1000)
        },
        init(){
            this.m=0,this.s=0
            let level=this.level[this.current]  //获取当前关卡
            this.count=level.count
            var list=[],indexlist=[]  //1，初始化表格
            for(let i=0;i<level.row;i++){
                list.push([])
                for(let j=0;j<level.col;j++){
                    let neb=[]
                    neb.push({row:i-1,col:j,})
                    neb.push({row:i-1,col:j+1})
                    neb.push({row:i,col:j+1})
                    neb.push({row:i+1,col:j+1})
                    neb.push({row:i+1,col:j})
                    neb.push({row:i+1,col:j-1})
                    neb.push({row:i,col:j-1})
                    neb.push({row:i-1,col:j-1})
                    

                    list[i].push({
                        content:0,  //0-8 -1:雷
                        neb:neb,  //领居格子
                        closed:1,   //0:关闭 1:打开
                        flag:0  //是否标记
                       })
                       //所有格子坐标
                       indexlist.push({
                        row:i,
                        col:j
                    })
                }
            }
            console.log(list)
            console.log(indexlist)
            //2，生成雷
            for(let i=0;i<level.count;i++){
               let x=Math.floor(Math.random()*indexlist.length)  //随机坐标
               let r=indexlist[x].row,
                   c=indexlist[x].col
                   list[r][c].content=-1
                   indexlist.splice(x,1)
            }
            //3，填数字
            for(let i=0;i<list.length;i++){
                for(let j=0;j<list[i].length;j++){
                    if(list[i][j].content !==-1){  //不是雷的格子填数字
                        let neb=list[i][j].neb
                        let c=0  //雷的数量
                        neb.forEach(item=>{
                            let row=item.row,
                                col=item.col
                            if(list[row] && list[row][col]!=undefined && list[row][col].content ==-1)
                                c++
                        })
                    list[i][j].content=c
                    } 
                }
            }
            this.list=list
        },
        open(item){ //打开格子
            if(this.start=="off")return  
            if(!item.closed || item.flag)return  //已经打开的格子
            item.closed=0  //打开格子
            this.num++
            if(item.content == -1){//遇到雷  把剩下格子都打开
                this.start="off"  //游戏结束
                clearInterval(this.timer)
                this.list.forEach(row=>{  
                   row.forEach(col=>{
                    if(col.content == -1){
                        col.closed=0
                    }
                   })
                })
                //alert('游戏结束')
                return
            }
            if(item.content == 0){
                //翻到空白格
                item.neb.forEach(gz=>{
                    let r=gz.row,c=gz.col
                    if(this.list[r]&&this.list[r][c]!=undefined){
                        this.open(this.list[r][c])
                    }
                })
            }
            this.isSuccess()
        },
        point(item){  //标记 取消
            this.num++
            if(item.flag){
                item.flag=0
                this.count++
            }else{
                item.flag=1
                this.count--
            } 
        },
        openSafe(item){
            for(let i=0;i<item.neb.length;i++){
                if(this.isExist(item.neb[i])){
                    let gz=this.list[item.neb[i].row][item.neb[i].col]  //当前格子
                    if(gz.closed && !gz.flag){
                        if(gz.content==-1){
                            console.log('失败')
                            return
                        }
                    }
                }
            }
            console.log('成功')
            for(let i=0;i<item.neb.length;i++){
                if(this.isExist(item.neb[i])){
                    let gz=this.list[item.neb[i].row][item.neb[i].col]  //当前格子
                    if(gz.closed && !gz.flag){
                        this.open(gz)
                    }
                }
            }
        },
        isExist(pos){ //判断坐标是否存在
            let r=pos.row,c=pos.col
            if(this.list[r] && this.list[r][c]!=undefined){
                return true
            }else{
                return false
            }
        },
        isSuccess(){
            let level=this.level[this.current]
            //x+level.count == level.row*level.col
            let total=0
            this.list.forEach(row=>{
                row.forEach(col=>{
                    if(col.closed == 0)total++
                })
            })
            if(total+level.count == level.row*level.col){
                alert('恭喜你，挑战成功')
                this.start="off"
                clearInterval(this.timer)
            }
        }
    }
}).mount('#app')